### Lab2-1:安裝 YOLOv5 環境 ### >>> conda create --name yolov5_313 python=3.13 # 複製虛擬環境 myenv,新的虛擬環境為 myenv_new >>> activate yolov5_313 # 啟動 yolov5 的虛擬環境 ### Lab2-2:下載 YOLOv5 檔案 ### # git for Windows 的網址 https://gitforwindows.org/ (yolov5_313) >>> git clone https://github.com/ultralytics/yolov5 # 下載 YOLOv5 原始碼 (yolov5_313) >>> cd yolov5 # 進入 yolov5 目錄 (yolov5_313) >>> pip install -r requirements.txt # 安裝 YOLOv5 所需環境 ### Lab2-3:使用 YOLOv5 模型偵測物件 ### (yolov5_313) >>> python detect.py --source ./data/images/zidane.jpg # 以 YOLOv5 模型偵測圖片物件 (yolov5_313) >>> python detect.py --source https://www.youtube.com/watch?v=7BwW2dH6ZI0 # 直接偵測 Youtube 失敗 (yolov5_313) >>> pip install yt-dlp (yolov5_313) >>> yt-dlp --geo-bypass -f "bv*+ba/b" --merge-output-format mp4 -o "test1.mp4" https://www.youtube.com/watch?v=te09w4vbQiY&list=RDte09w4vbQiY&start_radio=1 (yolov5_313) >>> python detect.py --source test1.mp4 --view-im ### Lab2-4:使用 YOLOv5 模型偵測攝影機 ### (yolov5_313) >>> python detect.py --source 0 # 以 YOLOv5 模型偵測攝影機物件 (yolov5_313) >>> python detect.py --source 0 --weight yolov5n.pt # 以 yolov5n 的模型偵測攝影機物件 (yolov5_313) >>> python detect.py --help # 查詢參數用法 ### Lab2-4:匯入 ultralytics 來使用 YOLOv5 模型偵測物件 (2-1.py) ### import torch from torch.serialization import add_safe_globals from models.yolo import Model # 匯入 YOLOv5 的 Model 類別(需在 yolov5 專案根目錄下執行) # 允許 PyTorch 在載入模型權重時,安全地識別 YOLOv5 的 Model 類別 add_safe_globals([Model]) # 從 PyTorch Hub 載入 YOLOv5 的預訓練模型 # 可用的模型包含: # yolov5n(nano,最輕量) # yolov5s(small) # yolov5m(medium) # yolov5l(large) # yolov5x(xlarge,最準確但最慢) model = torch.hub.load('ultralytics/yolov5', 'yolov5n') # 測試影像來源(可以是 URL、檔案路徑、NumPy 陣列、PIL 圖像、OpenCV 影像、或影像清單) img = 'https://ultralytics.com/images/zidane.jpg' # 使用模型進行物件偵測推論 results = model(img) # 在終端機中印出偵測結果摘要(例如:偵測到的物件類別與信心分數) results.print() # 顯示偵測後的影像(會開啟視窗顯示帶有邊框與標籤的圖片) results.show() # 將偵測結果影像儲存到 runs/detect/exp 目錄中 results.save() # 將偵測結果轉成 Pandas DataFrame 格式並印出 # 每一行包含: # xmin, ymin, xmax, ymax:邊界框座標 # confidence:信心分數 # class:類別索引 # name:類別名稱 print(results.pandas().xyxy[0]) ### Lab2-5:YOLO 即時影像辦識與存檔 (2-2.py) ### # 匯入必要套件 import torch from torch.serialization import add_safe_globals from models.yolo import Model # 匯入 YOLOv5 的模型類別,需在 yolov5 專案根目錄中執行 import cv2 # 匯入 OpenCV,用於影像讀取與顯示 # 允許 PyTorch 在載入模型時安全地識別 YOLOv5 的 Model 類別 add_safe_globals([Model]) # 從 PyTorch Hub 載入 YOLOv5s 預訓練模型 # 可選模型: # yolov5n(Nano,最輕量) # yolov5s(Small) # yolov5m(Medium) # yolov5l(Large) # yolov5x(X-Large,最精準但速度較慢) model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # 初始化攝影機(0 表示預設攝影機) cap = cv2.VideoCapture(0) # 檢查攝影機是否成功開啟 if not cap.isOpened(): print('請檢查攝影機,無法開啟') exit() # 設定攝影機解析度(寬度 640、高度 480) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # 開始即時偵測迴圈 while True: # 從攝影機讀取一幀影像 ret, frame = cap.read() if not ret: print('無法取得影像') break # OpenCV 讀入的影像格式為 BGR,需要轉換為 RGB 才能輸入 YOLOv5 模型 rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 使用 YOLOv5 模型進行物件偵測 results = model(rgb_frame) # 將偵測結果繪製在影像上 # results.render() 回傳一個列表,取第一張影像 [0] output_frame = results.render()[0] # 將 RGB 影像轉回 BGR,以便 OpenCV 顯示 bgr_frame = cv2.cvtColor(output_frame, cv2.COLOR_RGB2BGR) # 顯示即時偵測結果影像 cv2.imshow('YOLOv5 Detection', bgr_frame) # 按下 'q' 鍵即可退出迴圈 if cv2.waitKey(1) & 0xFF == ord('q'): break # 釋放攝影機資源 cap.release() # 關閉所有 OpenCV 視窗 cv2.destroyAllWindows() ### Lab2-6:自行訓練 YOLO 模型 ### # 安裝 labelImg 標註工具 (yolov5_313) >>> pip install labelImg # 從 PyPI 下載與安裝 labelImg (yolov5_313) >>> start /min labelImg # 執行 labelImg,start /min 為背景執行 ### Lab2-7:標註圖片 ### # 到 Kaggle 下載訓練照片檔 https://www.kaggle.com/datasets/andrewmvd/road-sign-detection # coco128 資料集 的目錄結構 https://www.kaggle.com/datasets/ultralytics/coco128 # YOLOv5 官方網頁上的建議 https://github.com/ultralytics/yolov5/wiki/Tips-for-Best-Training-Results ### Lab2-8:資料集 YAML 設定檔 (road.yaml) ### # 設定圖檔路徑 path: ./datasets/road # 資料根目錄 train: images/train # 訓練用資料集(相對於 path) val: images/train # 驗證用資料集(相對於 path) test: # 測試用資料集(相對於 path,可省略) # 物件類別設定 nc: 4 # 類別數量 names: ['trafficlight', 'speedlimit', 'crosswalk', 'stop'] # 類別名稱 ### Lab2-9:訓練 YOLOv5 模型 ### # 進行 YOLOv5s 模型訓練 (yolov5_313) >>> python train.py --img-size 640 --batch 16 --epochs 500 --data road.yaml --weights yolov5s.pt ### Lab2-10:使用 Google Colab 來訓練模型 ### # 登入 Googe Drive from google.colab import drive drive.mount('/content/gdrive') # 此處需要登入 google 帳號 >>> %cd gdrive/MyDrive/ # 進入掛載的雲端硬碟資料夾 >>> !unzip yolov5-master.zip # 解壓縮 yolov5-master.zip >>> %cd yolov5-master # 進入掛載的雲端硬碟目錄 >>> pip install -r requirements.txt # 安裝 yolov5 所需模組 >>> !python train.py --img-size 640 --batch 16 --epochs 500 --data road.yaml --weights yolov5s.pt # 進行 YOLOv5s 模型訓練 ### Lab2-11:使用自己的模型進行預測:detect.py 指令稿 ### # 自己訓練出來的 YOLO 模型也可以直接套用 detect.py 指令稿進行預測 (yolov5_313) >>> python detect.py --weight runs/train/exp/weights/best.pt --source datasets\road\images\train\road0.png --iou-thres 0.5 --conf-thres 0.5 # 以自行訓練的 YOLO 模型偵測攝影機物件 (yolov5_313) >>> python detect.py --weight runs/train/exp/weights/best.pt --source 0 --iou-thres 0.5 --conf-thres 0.5 # 以自行訓練的 YOLO 模型偵測 Youtube 的影片,但失敗 (yolov5_313) >>> python detect.py --weight runs/train/exp/weights/best.pt --source https://www.youtube.com/watch?v=7BwW2dH6ZI0 --iou-thres 0.5 --conf-thres 0.5 # 改以手動下載 Youtube 後,再進行辨識 (yolov5_313) >>> yt-dlp --geo-bypass -f "bv*+ba/b" --merge-output-format mp4 -o "test2.mp4" https://www.youtube.com/watch?v=7BwW2dH6ZI0 (yolov5_313) >>> python detect.py --weight runs/train/exp/weights/best.pt --source test2.mp4 --iou-thres 0.5 --conf-thres 0.5 --view-im ### Lab2-12:使用自己的模型進行預測:自行撰寫 Python (2-3.py) ### # 匯入必要套件 import torch from torch.serialization import add_safe_globals from models.yolo import Model # 匯入 YOLOv5 的模型類別(需在 yolov5 專案根目錄執行) # 允許 PyTorch 在載入模型時安全地識別 YOLOv5 的 Model 類別 add_safe_gl### Lab3-1 ### # 在樹莓派官方網頁,下載作業系統的燒錄程式 https://www.raspberrypi.com/software/ ### Lab3-2 ### # 加入下面兩行 (第一行為註解) 到樹莓派的 /boot/config.txt # Enable TTL enable_uart=1 dtoverlay=disable-bt ### Lab3-3 ### # 下載 putty https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html ### Lab3-4 ### ~$ nano myfile.txt ### Lab3-5 ### ~$ ls -al # 列出檔案的資訊 ~$ pwd # 顯示當前的目錄路徑 ~$ mkdir ch1 # 建立目錄 ~$ rm -rf ch1 # 刪除目錄 ~$ rm myfile.txt # 刪除檔案 ~$ mkdir ch1 # 建立目錄 ~$ cd ch1 # 變更目錄到指定位置 ~$ cd ~ # 回到家目錄 ### Lab3-6 ### ~$ ifconfig # 檢查所有網卡的設定 ~$ ifconfig wlan0 # 檢查第一張無線網卡的設定 ### Lab3-7 ### ~$ sudo raspi-config ### Lab3-8 ### # 下載 VNC Viewer https://www.realvnc.com/en/connect/download/viewer/ ### Lab3-9 ### # 增加相機模組 imx219 的正確驅動 ~$ sudo nano /boot/firmware/config.txt # 找到 camera_auto_detect=1 這一行,在下面新增 dtoverlay=imx219 dtoverlay=imx219 # 重開機 ~$ sudo reboot ### Lab3-10 ### # 檢查相機模組是否有被偵測 ~$ ls /dev/video* # 檢查相機狀態 ~$ dmesg | grep -i camera ~$ dmesg | grep imx ### Lab3-11 ### # 輸入內建的開啟相機指令 ~$ libcamera-hello # 開啟 10 秒後,再關閉 ~$ libcamera-hello -t 10000 # 永不關閉 ~$ libcamera-hello -t 0 ### Lab3-12 ### # Xming 官網 https://sourceforge.net/projects/xming/ ### Lab3-13 ### # libcamera-hello + Qt 視窗顯示 (適用於 SSH 遠端) ~$ libcamera-hello -t 0 --qt-preview ### Lab3-14 ### ~$ uname -m # 查詢 CPU 的版本 ~$ file /bin/bash # 查詢 OS 的版本 ~$ lsb_release -a # 查詢 OS 的資訊 ~$ python -V # 顯示目前的 Python 版本 ~$ python # 進入 Python 的互動模式 >>> exit() # 離開互動模式 ### Lab3-15 ### ~$ nano test.py # 新增一個 Python 的程式檔 ### Lab3-16 (test.py) ### # 暫停 5 秒後,印出 Hello World! from time import sleep sleep(5) print('Hello World!') ### Lab3-17 ### ~/ch3$ python test.py # 執行 Python 程式檔 ### Lab3-18 ### ~$ sudo apt-get update # 更新軟體資料庫 ~$ sudo apt-get upgrade # 更新已安裝的軟體 ~$ sudo apt-get install thonny # 安裝 thonny ~$ thonny & # 執行 thonny ### Lab3-19 ### # 安裝 venv 與 pip ~$ sudo apt install python3-venv python3-pip # 在家目錄下,建立虛擬環境 myeny ~$ python -m venv ~/myenv # 啟用虛擬環境 myeny ~$ source ~/myenv/bin/activate # 檢查目前虛擬環境的套件清單 (myenv) ~$ pip list # 離開目前